import jwt from 'jsonwebtoken'
import { Next, ParameterizedContext } from 'koa'
import { PUBLIC_KEY } from '../app/config'
import Api from '../utils/Api'

const api = new Api()

/**
 * token鉴权 中间件
 */
export const tokenAuth = async (ctx: ParameterizedContext, next: Next) => {
  const token = ctx.headers.token as string
  if (!token) {
    ctx.body = api.error('未登录', 401)
  } else {
    try {
      /*
        verify(token, 公钥, 选项{algorithms: 算法})
        返回 数据体 + iat与exp
      */
      ctx.user = jwt.verify(token, PUBLIC_KEY, { algorithms: ['RS256'] })
      await next()
    } catch (error) {
      ctx.body = api.error('token失效', 402)
    }
  }
}
